Skip to content

Compose shared dialogs, tooltips and navigation - #87

Merged
wesbillman merged 41 commits into
mainfrom
codex/block-ui-compositions
Sep 22, 2026
Merged

wesbillman merged 41 commits into
mainfrom
codex/block-ui-compositions

Conversation

@mahanti

@mahanti mahanti commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Main refresh for morning review (2026-09-22)

Head 3b276793123aea43c23767d8c93f4e262b2a5872 merges main 0beb523443557c189e5fcf16a3ac9e8437666690 without rewriting existing commits. The resolved composition patch has the same stable patch ID as the prior #87 feature delta: all 13 files, 575 insertions / 19 deletions retained. Main's agent mention enrollment, control sizing/native reset, typography provenance, lockfile, and 12px legacy radius remain intact. An automatically retained stale 8px browser expectation was restored to main's assertion.

Validation of tree ea4480c473afd6bb6179da6502be13932b004f44 (unchanged by commit hooks): 65 design tests; app/viewer production builds; 38 viewer cases (22.2s) and 12 complete appearance-file cases (8.0s), Chromium and WebKit. Viewer used an untracked config changing only its preview port because another worktree owns port 1443; that temporary config was removed. Normal push hooks passed app/viewer TypeScript, 50 selected unit tests in nine files, and all design guards. All 41 commits against main have DCO trailers. Independent source review found no remaining conflict-resolution regression.

This refresh adds/removes no browser scenarios, changes no dependency versions, and does not approve or merge the PR. Fresh hosted CI, outstanding formal review gates, and attended native/visual acceptance are separate. Historical validation below belongs to its stated snapshots.


Adds shared Dialog and Tooltip components, row/pill navigation, and a clearer distinction between content tabs and backdrop navigation. Base UI owns modal focus, keyboard behavior, positioning and dismissal; Buzz supplies the shared frame and semantic styles.

This is stack 3/4, based on #86. The branch now includes the refreshed parents and uses the current Phosphor icon gateway. Later app adoption remains in #88.

Review fixes:

  • Tooltip preserves every existing aria-describedby reference while adding its own hint. Escape removes only the tooltip reference, and the control keeps its accessible name. The fix applies the combined IDs at Base UI's final render-element boundary.
  • NavigationItem's catalog and specimens now show the supported pill variant, including resting and selected examples.
  • The merge preserves current main's stronger held-unread/history test and removes leftover imports of the old icon family.

Validation at 45f606e: lint, app/viewer typechecks and all design guards pass; all 61 design tests pass; app and viewer production builds pass; all 34 viewer checks pass in Chromium and WebKit (18.7 seconds). The tooltip defect failed the new mounted regression before the fix, then passed with existing descriptions, open hint, Escape dismissal and unchanged accessible name verified. This refresh adds or removes no browser scenarios. All commits are signed off; normal hooks remain enabled. Hosted CI verifies broader app/native behavior; assembled-stack desktop acceptance remains separate.

Final parent refresh at 7c51d7d includes #86's independently reviewed native reset correction and activity-row layout fix. The only merge conflict was two adjacent viewer examples; both Dialog and RadioGroup examples are preserved, and viewer typechecking passes. All 1,821 whole-app unit tests and design guards pass through the normal pre-push hook (15.71 seconds). All 12 hosted checks passed at 7c51d7d, including native tests, measurements, both browser engines, security, DCO and CI required; no requested-change review was dismissed.

Latest base refresh at 1b5a4fc merges #86 afc4de9, including current main through 0b73a45. The merge was clean and preserves the inherited presence, native Dock badge, and local-development notification mute behavior. No #87-specific source changes were needed. Normal commit/push hooks pass: TypeScript, 1,885 unit tests across 182 files (16.52 seconds), viewer typechecking, and all design guards. The remote head matches this checked commit; every commit against the PR base has a sign-off, and hosted DCO passes. All 12 hosted checks now pass at this exact head, including every Chromium/WebKit shard, native/tool checks, measurements, security and DCO. The browser/build evidence above belongs to its stated earlier snapshots; it was not rerun locally for this clean parent merge.

Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
@mahanti
mahanti marked this pull request as ready for review September 21, 2026 20:13
@mahanti
mahanti requested review from a team, comp615 and wesbillman as code owners September 21, 2026 20:13
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Reviewed 338bbb5be64cb9bcd312ca153cc49ce402f0332f against stacked base b31a9a8d93352569ba2a7f49ad2c584e16ce5af4, not main.

[P2] Preserve the tooltip description after render-element prop merging

src/shared/design-system/ui/Tooltip.tsx:17–23

When the child already has aria-describedby, the combined value passed to BaseTooltip.Trigger is overwritten by the original child prop in render={children}. Base UI 1.7.0 merges render.props last. As a result, the tooltip opens visibly but its text is absent from the control’s accessible description, violating this wrapper’s description-link contract. This is a defect in the new shared component’s supported composition, not a regression in an existing app screen; exact-head adoption is limited to the viewer/tests.

Reproduced in Chromium and WebKit using the real shared components: <Tooltip content="Additional hint"><Button aria-describedby="existing-help">Described action</Button></Tooltip> plus the existing help element. Focus the button; the tooltip opens with an ID, but the button retains only aria-describedby="existing-help" for the full assertion timeout. The same probe without an existing description passes in both engines.

Apply the combined description on the final rendered trigger, preserving the original IDs. Add a mounted regression asserting both descriptions while open and only the original after dismissal; retain the control’s accessible name.

Focused browser validation also passed modal shortcut isolation, allowed-in-modal dispatch, initial focus, focus wrapping, pending Escape/outside-press protection, dismissal, and keyboard return focus in both engines. No broad CI-equivalent suites or native visual checks rerun locally. This review does not certify the later #88 app adoption.

Non-blocking catalog gap: NavigationItem adds variant="pill", but ui/registry.ts:435–445 and tests/fixtures/design-system/ui/componentSpecimens.tsx:624–661 still document/exercise only rows. Add the pill’s rest/selected specimen and update variant metadata; no broken pill behavior was established.

All three independent source-review lanes returned. No additional material code defects were identified in the reviewed Dialog/overlay, Tabs, navigation forwarding, Field or history-test changes. Current hosted checks pass; full local scan and native/human visual acceptance remain deferred as documented by the author.

Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
…tings

Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>
Signed-off-by: Arjun Mahanti <arjun@squareup.com>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Review clear at this head; prior tooltip blocker resolved

Reviewed 1b5a4fcf597b9a44fd067e1ed1a3c3cde83aada8 against exact stacked base afc4de9a603178442aa4f16d0e884043586cfe43 (PR #86), not main. This is a COMMENTED re-review, not approval.

  • Tooltip description composition is corrected. src/shared/design-system/ui/Tooltip.tsx:20–30 applies the combined aria-describedby to the final render element via cloneElement, so the child’s original IDs no longer overwrite the added tooltip reference. The mounted regression at compositions.test.tsx:153–188 asserts two retained descriptions plus the live tooltip ID while open, the unchanged accessible name, and only the original descriptions after Escape.
  • The NavigationItem catalog gap is closed. Registry metadata and the interactive specimen now include the supported pill variant, with its existing shared styling. Dialog and RadioGroup examples survive the parent refresh.
  • No additional blocking defect was established in the integration delta. Source review covered the changed registry/specimen sets, overlay tokens and portal scope, Dialog ownership, tabs/panels, navigation forwarding and merge preservation. Unchanged accepted paths were compared against the earlier reviewed source rather than broadly re-reviewed.

Evidence and limits

Both complementary source-review lanes completed on a verified bare Blox object store. Existing hosted checks are 12/12 successful for this exact head. No repository code was checked out, installed, built, tested, imported or executed during this review. The tooltip lifecycle evidence here is source and mounted-test coverage plus existing CI, not a new browser/accessibility-tree measurement. Base UI package implementation was not independently inspected.

PR #86’s legacy-radius finding and PR #73’s fixed-height settings finding are inherited parent concerns, not newly introduced #87 defects. This review does not certify assembled-stack desktop acceptance or #88 adoption, dismiss earlier reviews, approve, or merge.

Base automatically changed from codex/block-ui-controls to main September 22, 2026 03:10
Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Carl, an automated reviewer, commenting via Wes’s GitHub account.

Review clear: no actionable blockers found for head 3b276793123aea43c23767d8c93f4e262b2a5872 against base 0beb523443557c189e5fcf16a3ac9e8437666690. This is a COMMENTED review, not approval or merge authorization.

  • Convergent re-review: the current 13-file, +575/-19 composition patch has the same stable patch ID as the previously reviewed delta at 1b5a4fcf597b9a44fd067e1ed1a3c3cde83aada8. Source comparison preserves main’s changes across all 140 changed paths, aside from the intended additive design documentation and two popover layer substitutions. Tooltip description/open/Escape handling, Dialog ownership, Tabs’ existing no-panel branch, navigation forwarding and registry/specimen coverage remain intact.
  • Contract and scope: Block UI supplies the visual language, Base UI owns interaction, and Buzz owns composition/styles with the host remaining the sole appearance/reset owner. The new overlay stylesheet is wired into the viewer but not the shipping host. At this head, the new Dialog/Tooltip, panel-tab and pill usages are confined to tests/viewer; the registry is documentation metadata, not a component export. That is a downstream adoption integration requirement, not a demonstrated current-head defect. This review does not certify #88 adoption.
  • Evidence and limits: two bounded source lanes and coordinator verification ran read-only on the pinned Blox object store. Existing exact-head CI shows 11 successful checks, including CI required, and one skipped Windows native validation check. No checkout, install, build, test or PR-code execution was performed for this review. Runtime geometry, outside-pointer dismissal and attended native/visual acceptance were not newly exercised; Base UI internals were not inspected.

@wesbillman
wesbillman merged commit 09565c3 into main Sep 22, 2026
12 checks passed
@wesbillman
wesbillman deleted the codex/block-ui-compositions branch September 22, 2026 12:38
wesbillman pushed a commit that referenced this pull request Sep 22, 2026
Main squashed #87 as 09565c3 with the same tree as incorporated parent 3b27679. Preserve the existing #88 tree exactly while recording the new base ancestry.

Signed-off-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants